package GUI;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

/**
 * 
 * @author MaximumDataOverdrive
 * 
 */
public class LoginPanel extends JPanel implements ActionListener {
	private JTextField textField;
	private JPasswordField passwordField;
	private JLabel lblPasswort;
	private JLabel lblLogin;
	private JButton btnLogin;

	/**
	 * Konstruktor des Login-Panels
	 */
	public LoginPanel() {

		initialize();
	}

	/**
	 * Diese Methode initialisert die GUI des Login-Panels
	 */
	private void initialize() {
		final GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[] { 0, 0 };
		gridBagLayout.rowHeights = new int[] { 0, 0, 0, 0, 0, 0 };
		gridBagLayout.columnWeights = new double[] { 1.0, Double.MIN_VALUE };
		gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0,
				Double.MIN_VALUE };
		setLayout(gridBagLayout);
		final GridBagConstraints gbc_lblLogin = new GridBagConstraints();
		gbc_lblLogin.anchor = GridBagConstraints.WEST;
		gbc_lblLogin.insets = new Insets(0, 0, 5, 0);
		gbc_lblLogin.gridx = 0;
		gbc_lblLogin.gridy = 0;
		add(getLblLogin(), gbc_lblLogin);
		final GridBagConstraints gbc_textField = new GridBagConstraints();
		gbc_textField.insets = new Insets(0, 0, 5, 0);
		gbc_textField.fill = GridBagConstraints.HORIZONTAL;
		gbc_textField.gridx = 0;
		gbc_textField.gridy = 1;
		add(getTextField(), gbc_textField);
		final GridBagConstraints gbc_lblPasswort = new GridBagConstraints();
		gbc_lblPasswort.anchor = GridBagConstraints.WEST;
		gbc_lblPasswort.insets = new Insets(0, 0, 5, 0);
		gbc_lblPasswort.gridx = 0;
		gbc_lblPasswort.gridy = 2;
		add(getLblPasswort(), gbc_lblPasswort);
		final GridBagConstraints gbc_passwordField = new GridBagConstraints();
		gbc_passwordField.insets = new Insets(0, 0, 5, 0);
		gbc_passwordField.fill = GridBagConstraints.HORIZONTAL;
		gbc_passwordField.gridx = 0;
		gbc_passwordField.gridy = 3;
		add(getPasswordField(), gbc_passwordField);
		final GridBagConstraints gbc_btnLogin = new GridBagConstraints();
		gbc_btnLogin.gridx = 0;
		gbc_btnLogin.gridy = 4;
		add(getBtnLogin(), gbc_btnLogin);
	}

	/**
	 * Diese Methode gibt das Text-Feld für den Login-Namen des Users zurück.
	 * Gibt es dieses nicht, wird es neu initialisert.
	 * 
	 * @return textField Text-Feld indem der Login-Name des Users eingetragen
	 *         wird
	 */
	private JTextField getTextField() {
		if (textField == null) {
			textField = new JTextField();
			textField.setColumns(10);
		}
		return textField;
	}

	/**
	 * Diese Methode gibt das Password-Feld des LoginPanels zurück. Gibt es
	 * dieses nicht, wird es neu erzeugt.
	 * 
	 * @returnpasswordField Passwort-Feld in das das Passwort des Users
	 *                      eingetragen wird, der sich einloggen will.
	 */
	private JPasswordField getPasswordField() {
		if (passwordField == null) {
			passwordField = new JPasswordField();
			passwordField.addActionListener(this);
		}
		return passwordField;
	}

	/**
	 * Diese Methode gibt das Label mit "Passwort:" zurück. Gibt es dieses
	 * nicht, wird es neu initialisert.
	 * 
	 * @return lblPasswort Label indem "Passwort:" steht.
	 */
	private JLabel getLblPasswort() {
		if (lblPasswort == null) {
			lblPasswort = new JLabel("Passwort:");
		}
		return lblPasswort;
	}

	/**
	 * Diese Methode gibt das Label mit "Login:" zurück. Gibt es dieses nicht,
	 * wird es neu initialisert.
	 * 
	 * @return lblLogin Label indem "Login:" steht.
	 */
	private JLabel getLblLogin() {
		if (lblLogin == null) {
			lblLogin = new JLabel("Login:");
		}
		return lblLogin;
	}

	/**
	 * Diese Methode gibt den Button: btnLogin zurück. Existiert dieser nicht,
	 * wird er neu initialisert.
	 * 
	 * @return btnLogin Button der den Login des Users ermöglicht
	 */
	private JButton getBtnLogin() {
		if (btnLogin == null) {
			btnLogin = new JButton("Einloggen");
			btnLogin.addActionListener(this);
		}
		return btnLogin;
	}

	/**
	 * Diese Methode enthält alle Funktionen, die bei der Betätigung der
	 * jeweiligen Elemente ausgeführt werden. Dabei wird bei den if-Bedigungen
	 * geprüft, welches Element betätigt worden ist und die gewünschte Funktion
	 * wird ausgeführt.
	 */
	@Override
	public void actionPerformed(final ActionEvent arg0) {

		StundenplanController.getInstance().einloggen(getTextField().getText(),
				new String(getPasswordField().getPassword()));
	}
}
